FF_CURVED
Overview
The FF_CURVED function calculates the Darcy friction factor for fluid flowing through curved pipes or helical coils, automatically handling both laminar and turbulent flow regimes. Curved pipe flow is common in heat exchangers, industrial coils, and piping systems where space constraints require compact designs.
Flow in curved pipes differs significantly from straight pipe flow due to secondary flow patterns induced by centrifugal forces. These secondary flows, characterized by the Dean number (De = Re \sqrt{D_i/D_c}), increase wall shear stress and thus the friction factor compared to equivalent straight pipe flow. The Dean number combines the Reynolds number with the curvature ratio to quantify the strength of secondary flow effects.
This implementation uses the fluids library, which provides multiple correlation methods based on the Heat Exchanger Design Handbook recommendations. For detailed API information, see the fluids.friction documentation.
The function automatically selects between laminar and turbulent correlations based on the critical Reynolds number, which is higher for curved pipes than for straight pipes. The default transition criterion uses the Schmidt correlation:
Re_{crit} = 2300 \left[ 1 + 8.6 \left( \frac{D_i}{D_c} \right)^{0.45} \right]
For the laminar regime, the default Schmidt correlation multiplies the straight-pipe friction factor by a curvature correction:
f_{curved} = f_{straight} \left[ 1 + 0.14 \left( \frac{D_i}{D_c} \right)^{0.97} Re^{1 - 0.644 (D_i/D_c)^{0.312}} \right]
The turbulent regime uses different Schmidt correlations depending on Reynolds number range, accounting for both curvature effects and pipe wall roughness. Multiple alternative correlations are available through the ff_curved_method parameter, including White, Mori-Nakayama, Prasad, and others for specific applications or validation purposes.
This example function is provided as-is without any representation of accuracy.
Excel Usage
=FF_CURVED(Re, Di, Dc, roughness, ff_curved_method, rec_method, laminar_method, turbulent_method, Darcy)
Re(float, required): Reynolds number with D=Di, [-]Di(float, required): Inner diameter of the tube making up the coil, [m]Dc(float, required): Diameter of the helix/coil (center-to-center), [m]roughness(float, optional, default: 0): Roughness of pipe wall, [m]ff_curved_method(str, optional, default: null): Specific correlation method to use, overriding automatic selectionrec_method(str, optional, default: “Schmidt”): Critical Re transition methodlaminar_method(str, optional, default: “Schmidt laminar”): Laminar regime correlationturbulent_method(str, optional, default: “Schmidt turbulent”): Turbulent regime correlationDarcy(bool, optional, default: true): If false, returns Fanning friction factor
Returns (float): Friction factor, [-]
Examples
Example 1: Turbulent flow with default parameters
Inputs:
| Re | Di | Dc |
|---|---|---|
| 100000 | 0.02 | 0.5 |
Excel formula:
=FF_CURVED(100000, 0.02, 0.5)
Expected output:
0.023
Example 2: Laminar flow in helical coil
Inputs:
| Re | Di | Dc |
|---|---|---|
| 250 | 0.02 | 0.1 |
Excel formula:
=FF_CURVED(250, 0.02, 0.1)
Expected output:
0.475
Example 3: Turbulent flow with pipe roughness
Inputs:
| Re | Di | Dc | roughness |
|---|---|---|---|
| 50000 | 0.01 | 0.2 | 0.0001 |
Excel formula:
=FF_CURVED(50000, 0.01, 0.2, 0.0001)
Expected output:
0.0494
Example 4: Return Fanning friction factor instead of Darcy
Inputs:
| Re | Di | Dc | Darcy |
|---|---|---|---|
| 100000 | 0.02 | 0.5 | false |
Excel formula:
=FF_CURVED(100000, 0.02, 0.5, FALSE)
Expected output:
0.006
Example 5: Turbulent flow with Guo method
Inputs:
| Re | Di | Dc | ff_curved_method |
|---|---|---|---|
| 200000 | 0.01 | 0.2 | Guo |
Excel formula:
=FF_CURVED(200000, 0.01, 0.2, "Guo")
Expected output:
0.022
Python Code
import micropip
await micropip.install(["fluids"])
from fluids.friction import friction_factor_curved as fluids_friction_factor_curved
def ff_curved(Re, Di, Dc, roughness=0, ff_curved_method=None, rec_method='Schmidt', laminar_method='Schmidt laminar', turbulent_method='Schmidt turbulent', Darcy=True):
"""
Calculate friction factor for fluid flowing in a curved pipe or helical coil, supporting both laminar and turbulent regimes.
See: https://fluids.readthedocs.io/fluids.friction.html#fluids.friction.friction_factor_curved
This example function is provided as-is without any representation of accuracy.
Args:
Re (float): Reynolds number with D=Di, [-]
Di (float): Inner diameter of the tube making up the coil, [m]
Dc (float): Diameter of the helix/coil (center-to-center), [m]
roughness (float, optional): Roughness of pipe wall, [m] Default is 0.
ff_curved_method (str, optional): Specific correlation method to use, overriding automatic selection Valid options: White, Mori Nakayama laminar, Schmidt laminar, Guo, Ju, Schmidt turbulent, Prasad, Mandal Nigam, Mori Nakayama turbulent, Czop. Default is None.
rec_method (str, optional): Critical Re transition method Valid options: Seth Stahel, Ito, Kubair Kuloor, Kutateladze Borishanskii, Schmidt, Srinivasan. Default is 'Schmidt'.
laminar_method (str, optional): Laminar regime correlation Valid options: White, Mori Nakayama laminar, Schmidt laminar. Default is 'Schmidt laminar'.
turbulent_method (str, optional): Turbulent regime correlation Valid options: Guo, Ju, Schmidt turbulent, Prasad, Mandal Nigam, Mori Nakayama turbulent, Czop. Default is 'Schmidt turbulent'.
Darcy (bool, optional): If false, returns Fanning friction factor Default is True.
Returns:
float: Friction factor, [-]
"""
# Convert inputs to appropriate types
try:
Re = float(Re)
Di = float(Di)
Dc = float(Dc)
roughness = float(roughness)
except (ValueError, TypeError):
return "Error: Could not convert numeric parameters."
# Validate inputs
if Re <= 0:
return "Error: Reynolds number must be positive."
if Di <= 0:
return "Error: Inner diameter must be positive."
if Dc <= 0:
return "Error: Coil diameter must be positive."
if roughness < 0:
return "Error: Roughness cannot be negative."
# Handle None for ff_curved_method
if ff_curved_method is None:
ff_curved_method = None
try:
result = fluids_friction_factor_curved(
Re=Re,
Di=Di,
Dc=Dc,
roughness=roughness,
Method=ff_curved_method,
Rec_method=rec_method,
laminar_method=laminar_method,
turbulent_method=turbulent_method,
Darcy=Darcy
)
# Handle special float values
if result != result: # NaN check
return "nan"
if result == float('inf'):
return "inf"
if result == float('-inf'):
return "-inf"
return float(result)
except Exception as e:
return f"Error computing friction factor: {str(e)}"